'''
   author:黎作文
   date:2021/12/8 17:33
   project:2021-12-03迭代器与生成器.py
'''
# 利用map批量检测用户名是否符合规范=> username符合规范, username不符合规范
# • 只能包含数据、字母、下划线，不以数字开头，长度在6-18之间
#  filter把合法的用户名显示出来
import re
msg="hasdfjaslfjkoisafjkol"
result=re.findall("^[A-Za-z_][A-Za-z0-9_]{5,17}$",msg)
print(result)

#  匿名函数+reduce实现 1*2*3*...*n
from functools import reduce
print(reduce(lambda x,y:x*y,range(1,10)))

#  filter函数:找出[1-100]能被3整除的数
print(list(filter(lambda x: x % 3 == 0,range(1,101))))

#  map函数:求list[1-10]各项的平方
print(list(map(lambda x: x ** 2,range(1,11))))

#  将列表[1,4,5,9] 转换成 '1459'的字符串
def custom_int(s):
    def char_to_number(string):
        all_number_dict = {0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9'}
        # 以参数string为键，取出all_number_dict里面的值
        return all_number_dict[string]

    def result_number(x, y):
        res = x + y
        return res

    return reduce(result_number, map(char_to_number, s))
s=[1,4,5,9]
print(custom_int(s))
print(type(custom_int(s)))

#  有以下列表：list1=[7, -8, 5, 4, 0, -2, -5]
# • 正数在前负数在后
# • 整数从小到大
# • 负数从大到小
list1=[7, -8, 5, 4, 0, -2, -5]
zs=[]
fs=[]
for i in list1:
    if i > 0:
        zs.append(i)
    else:
        fs.append(i)
zs=sorted(zs,reverse=False)
fs=sorted(fs,reverse=True)
zs.extend(fs)
print(zs)
# print(sorted(list1, key=lambda x: x*-10 if x <= 0 else x))
# print(sorted(list1))
#  这是一个字符串排序，排序规则：小写<大写<奇数<偶数
# • s ='asdf234GDSdsf23' #排序:小写-大写-奇数-偶数
# • 原理：先比较元组的第一个值，FALSE
s ='asdf234GDSdsf23'
def func1(s):
    for i in s:
        if i.isdigit():
            if int(i) % 2 == 0:
                return (True, True, i)
            else:
                return (True, False, i)
        elif i.isupper():
            return (False, True, i)
        elif i.islower():
            return (False, False, i)

print(''.join(sorted(s, key=func1)))

